home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0059_80x30 Text Mode Procedure.pas < prev    next >
Pascal/Delphi Source File  |  1993-09-26  |  2KB  |  59 lines

  1. (*
  2. From: MIGUEL MARTINEZ              Refer#: NONE
  3. Subj: 80x30 Text-Mode Procedure      Conf: (1617) L-Pascal
  4. ---------------------------------------------------------------------------
  5. Hello to everyone!. A friend of mine who enjoys Assembler, has developed a
  6. routine, to provide "another" video mode to all those who develop text-based
  7. programs.
  8.  
  9. It's a routine to set a 80x30 text mode, using the 16x8 font of the VGA.
  10. I think is a better mode to work, than the standard 80x25 mode: More
  11. information on screen, without loosing the pretty 16x8 chars.
  12.  
  13. I have translated this routine to Pascal, and here is the result. It will
  14. work on any standard VGA card.
  15. *)
  16.  
  17. {Procedure to set 80 columns per 30 rows video mode}
  18. {Orignial Author: Ignacio García Pérez}
  19. Procedure Set80x30Mode;
  20. Var CrtcReg:Array[1..8] of Word;
  21.     Offset:Word;
  22.     i,Data:Byte;
  23. Begin
  24.   CrtcReg[1]:=$0c11;           {Vertical Display End (unprotect regs. 0-7)}
  25.   CrtcReg[2]:=$0d06;           {Vertical Total}
  26.   CrtcReg[3]:=$3e07;           {Overflow}
  27.   CrtcReg[4]:=$ea10;           {Vertical Retrace Start}
  28.   CrtcReg[5]:=$8c11;           {Vertical Retrace End (& protect regs. 0-7)}
  29.   CrtcReg[6]:=$df12;           {Vertical Display Enable End}
  30.   CrtcReg[7]:=$e715;           {Start Vertical Blanking}
  31.   CrtcReg[8]:=$0616;           {End Vertical Blanking}
  32.  
  33.   MemW[$0040:$004c]:=8192;     {Change page size in bytes}
  34.   Mem[$0040:$0084]:=29;        {Change page length}
  35.   Offset:=MemW[$0040:$0063];   {Base of CRTRC}
  36.   Asm
  37.     cli                        {Clear Interrupts}
  38.   End;
  39.  
  40.   For i:=1 to 8 do
  41.     PortW[Offset]:=CrtcReg[i]; {Load Registers}
  42.  
  43.   Data:=Port[$03cc];
  44.   Data:=Data And $33;
  45.   Data:=Data Or $C4;
  46.   Port[$03c2]:=Data;
  47.   Asm
  48.    sti                         {Set Interrupts}
  49.    mov ah,12h                  {Select alternate printing routine}
  50.    mov bl,20h
  51.    int 10h
  52.   End;
  53. End; {Of Procedure}
  54.  
  55. BEGIN
  56. Set80X30Mode;
  57. END.
  58.  
  59.